﻿using System;
using System.Web.UI;

namespace Csharp.Comum
{
    public static class AspNetAjax
    {
        /// <summary>
        /// Exibe messagebox - alert / ao navegante
        /// </summary>
        /// <param name="message">mensagem a ser exibida</param>
        /// <param name="controle"></param>
        public static void ShowMessage(Control controle, string message)
        {
            ShowMessage(controle, typeof (UpdatePanel), message);
        }

        public static void ShowMessage(Control controle, Type tipo, string message)
        {
            //no atlas beta 2 s funciona com updatepanel
            Control scriptPanel = FindControlByType(controle, tipo) ?? controle;
            ScriptManager.RegisterClientScriptBlock(
                scriptPanel, 
                scriptPanel.GetType(),
                Guid.NewGuid().ToString(),
                string.Format("alert('{0}');", Transformador.PrepararTextoJavaScript(message)),
                true);
        }

        public static void ExecutarJavascript(Control controle, string comando)
        {
            //no atlas beta 2 s funciona com updatepanel
            Control scriptPanel = FindControlByType(controle, typeof(UpdatePanel)) ?? controle;
            ScriptManager.RegisterClientScriptBlock(
                scriptPanel,
                scriptPanel.GetType(),
                Guid.NewGuid().ToString(),
                comando,
                true);
        }


        /// <summary>
        /// Encontra o primeiro objeto do tipo passado
        /// </summary>
        /// <param name="tipo">tipo  buscar</param>
        /// <param name="controle">objeto  buscar</param>
        /// <returns>objeto encontrado ou null caso no encontrado</returns>
        public static Control FindControlByType(Control controle, Type tipo)
        {
            if (controle.GetType() == tipo)
                return controle;
            
            foreach (Control obj in controle.Controls)
            {
                Control returnObj = FindControlByType(obj, tipo);
                if (returnObj != null)
                    return returnObj;
            }
            return null;
        }
    }
}
